import {reqShopCartList,reqdeleteCart,reqUpdateCartisChecked} from '@/api'
//引入创建临时身份的模块
import {userTemp} from '@/utils/temp_token'

const state = {
    // 程序运行起来的时候 仓库已经有了 用户临时身份存储到Vuex  方便请求拦截器那里调用 带给服务器
    userTempId:userTemp(),
    shopList:[]
}
const mutations = {
    GETSHOPCART(state,shopList){
        state.shopList = shopList
    }
}
const actions = {
   async getShopCart({commit}){
        let result = await reqShopCartList()
        if(result.code==200){
            commit('GETSHOPCART',result.data)
        }
    },
   async deleteCart({commit},skuId){
        let result = await reqdeleteCart(skuId)
        if(result.code==200){
            return 'ok'
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    // 修改某一个产品的选中与未选中状态
    async updateChecked({commit},{skuId,isChecked}){
       let result = await reqUpdateCartisChecked(skuId,isChecked)
       if(result.code==200){
           return 'ok1'
       }else{
           return Promise.reject(new Error('faile'))
       }
    },
    
    updateAllCart({getters,dispatch,commit},isChecked){
        let arr = []
        getters.shopCartData.cartInfoList.forEach((item)=>{
            
            let promise = dispatch('updateChecked',{skuId:item.skuId,isChecked})
            arr.push(promise)
        })
        //如果不书写return 返回的结果永远是undefined 永远是真
        //promise.all执行 里面的参数需要的是一个数组 数组里面每一个都是promise 如果都成功 promise返回的即为成功 的结果
        //如果有一个修改状态promise为失败 返回结果即为失败
        return Promise.all(arr)//使用Promise.all()这个方法可以保证 返回一个成功或失败的结果 供组件处理结果 
    },
    deleteAllCart({getters,dispatch}){
        let arr = []
        getters.shopCartData.cartInfoList.forEach((item)=>{
            let promise = dispatch('deleteCart',item.skuId)
            arr.push(promise)
        })
        return Promise.all(arr)
    }
}
const getters = {
    shopCartData(state){
        return state.shopList[0]||{}
    }
}
export default {
    state,
    mutations,
    actions,
    getters,
}